package hao.itheima.controller;


import hao.itheima.entity.AliOSSProperties;
import hao.itheima.entity.Result;
import hao.itheima.utils.AliyunOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RestController
@Slf4j
public class UploadController {


    /**
     * 文件上传
     *
     * @param username
     * @param age
     * @param file
     * @return
     * @throws IOException
     */
//    @PostMapping("/upload")
//    public Result upload(String username, Integer age, MultipartFile file) throws Exception {
//        log.info("上传文件: {},{},{}", username, age, file);
//        //1、获取原始文件名
//        String originalFilename = file.getOriginalFilename();
//
//        //2、通过UUID生成随机字符串
//        //专门用于生成字符串, 怎么生成都不会相同
//         String newFileName =  UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
//
//        //1.将前端上传的文件存储到本地
////        file.transferTo(new File("D:\\javadevelop\\develop\\" + newFileName));
//
//        return Result.success("001.jpg");
//    }

    //封装endpoint      复制粘贴不覆盖的原因就是夸克, 不要把夸克打开
    //OSS上面对应的域名
    //private static final String endpoint = "https://oss-cn-shenzhen.aliyuncs.com";

    //封装bucketName
    //OSS上面的桶空间名称
    //private static final String bucketName = "javahao147-tilas";

    //使用配置文件进行改进
//    @Value("${aliyun.oss.endpoint}")
//    private String endpoint;
//    @Value("${aliyun.oss.bucketName}")
//    private String bucketName;

    @Autowired
    private AliOSSProperties aliOSSProperties;


    /**
     * 上传文件到OSS, 接受前端的请求
     * 流程: 用户在上传文件是,参数会传递到后端, 然后将文件上传到OSS, 然后将文件名返回给前端, 前端拿到文件名后,进行展示文件(图片)
     *
     * @param file
     * @return
     * @throws Exception
     */
    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws Exception {
        //1、输出file是什么东西
        log.info("上传文件: {},{},{}", file);
        //2、获取文件后缀名称
        String originalFilename = file.getOriginalFilename();
        String extName = originalFilename.substring(originalFilename.lastIndexOf("."));
        //3、调用阿里云OSS的工具类,将文件上传到OSS
        //查看方法参数的快捷键 ctrl + P
        String upload = AliyunOSSUtils.upload(aliOSSProperties.getEndpoint(), aliOSSProperties.getBucketName(), file.getBytes(), extName);
        return Result.success(upload);
    }


}
